<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>js 的继承实现方式有哪些</title>
</head>
<body>


<script>
// 寄生组合继承
// 这个方法有点意思，融合了原型继承和call继承的优点，真正实现了私对私，公对公~为此，我们需要在call继承的基础上加上原型继承。

// 原型继承的思想是让子类原型=父类的一个实例，即Child.prototype = new Parent，换句话说，即Child.prototype.__proto__ = Parent.prototype(父类实例原型链指向父类原型，没毛病吧)。
// 从另一个角度看，我们不创建新的父类实例了！而是让子类原型的__proto__重定向，原本指向Object.prototype，现在让它指向Parent.prototype。实现了原型继承同样的效果。——实际上就是原型继承。

// 但还有一个问题，IE6~8下是不允许我们操作__proto__的，我们使用Object.create的方法代替。
// Object.create(A)：创建一个空对象，让这个空对象的__proto__指向A。


  // 寄生组合继承
  function Parent(){
      this.x = 100;
  }
  Parent.prototype.getX = function getX(){
      return this.x;
  }
  function Child(){
      Parent.call(this);      // call继承当然要保留，实现私对私
      this.y = 200;
  }
  Child.prototype = Object.create(Parent.prototype);    // 另类原型继承
  Child.prototype.getY = function getY(){
      return this.y;
  }
  let c1 = new Child;
  console.log(c1);





  
</script>

</body>
</html>